package com.aqie.libfactory.presenter.account;

import android.text.TextUtils;

import com.aqie.libcommon.factory.data.DataSource;
import com.aqie.libcommon.factory.presenter.BasePresenter;
import com.aqie.libfactory.data.helper.AccountHelper;
import com.aqie.libfactory.model.api.user.RegisterModel;

import net.qiujuer.genius.kit.handler.Run;
import net.qiujuer.genius.kit.handler.runable.Action;

import java.util.regex.Pattern;

import static com.aqie.libcommon.AppGlobals.Constance.REGEX_MOBILE;

/**
 * Presenter 实现类
 * 注册逻辑
 */
public class RegisterPresenter extends BasePresenter<RegisterContract.View>
        implements RegisterContract.Presenter, DataSource.Callback<Boolean>{
    public RegisterPresenter(RegisterContract.View view) {
        super(view);
    }

    /**
     * 当网络请求成功，注册好了，回送一个用户信息回来
     * 告知界面，注册成功
     * @param user
     */
    @Override
    public void onDataLoaded(Boolean user) {
        final RegisterContract.View view = getView();
        if (view == null)
            return;
        // 此时是从网络回送回来的，并不保证处于主线程状态
        // 强制执行在主线程中
        Run.onUiAsync(new Action() {
            @Override
            public void call() {
                // 调用主界面注册成功
                view.registerSuccess();
            }
        });
    }


    @Override
    public void onDataNotAvailable(final String errMsg) {
        final RegisterContract.View view = getView();
        if (view == null)
            return;
        // 此时是从网络回送回来的，并不保证处于主现场状态
        // 强制执行在主线程中
        Run.onUiAsync(new Action() {
            @Override
            public void call() {
                // 调用主界面注册失败显示错误
                view.showError(errMsg);
            }
        });
    }
    /**
     * 注册逻辑 参数校验
     * 调用AccountHelper
     */
    @Override
    public void register(RegisterModel registerModel) {
        // 调用开始方法，在start中默认启动了Loading
        start();

        // 得到View接口
        RegisterContract.View view = getView();

        //  todo 校验
        // 进行网络请求
        // 构造Model，进行请求调用
        // 进行网络请求，并设置回送接口为自己
        AccountHelper.register(registerModel, this);
    }

    /**
     * 检查手机号是否合法
     */
    @Override
    public boolean checkMobile(String phone) {
        // 手机号不为空，并且满足格式
        return !TextUtils.isEmpty(phone)
                && Pattern.matches(REGEX_MOBILE, phone);
    }


}
